var attributeAnswerMap = null; // 页面过滤用的属性Map条件
var crruentAttributeNo = null; // 当前显示的属性No
var allAttributeArray = null; // 所有属性数组

/**
 * 加载结果的所有属性
 *
 * @param schemeQuestions
 *            方案的问卷信息(其中包含属性)
 */
function loadResultAttribute(schemeQuestions) {
    if (schemeQuestions == null) { // 若方案无问卷信息,则不用加载
        return;
    }

    var isHasAttribute = false; // 是否存在属性
    var selectHtml = "<select class='select_min' id='attributeSelect' onchange='javascript:attributeSelect()'>";
    for (var i = 0; i < schemeQuestions.length; i++) { // 遍历所有问卷信息
        question = schemeQuestions[i];
        if (schemeQuestions[i].Type == 0) { // 当类型为属性时
            if (!isHasAttribute) { // 第一次判断有属性时,初始化一些信息
                isHasAttribute = true;
                allAttributeArray = new Array();
                attributeAnswerMap = new JsMap();
                crruentAttributeNo = schemeQuestions[i].No;
            }
            selectHtml += "<option value='" + schemeQuestions[i].No + "'>" + schemeQuestions[i].Name + "</option>"; // 所有属性放到一个select中,供选择
            attributeAnswerMap.put(schemeQuestions[i].No, ""); // 将保存一份属性条件到Map中,默认为空串
            allAttributeArray.push(schemeQuestions[i]);
        }
    }
    selectHtml += "</select>";

    if (isHasAttribute) { // 当存在属性时
        $("#tr_th_result_name").html(selectHtml); // 改变表头的显示
        createAttributeAnswerHtml(crruentAttributeNo); // 根据当前属性创建过滤条件输入HTML
    }

}

/**
 * 选择某个属性
 */
function attributeSelect() {
    crruentAttributeNo = $("#attributeSelect").val();
    createAttributeAnswerHtml(crruentAttributeNo);
}

/**
 * 根据选择的属性,创建输入属性过滤条件HTML
 *
 * @param selectAttributeNo
 *            选择的某个属性
 */
function createAttributeAnswerHtml(selectAttributeNo) {
    var html = "";
    var htmlWidth = $("#col_result_color").width(); // 控件宽度需要与列表定义中保持一致

    var theSelectAttribute = queryAttribute(selectAttributeNo); // 获取当前属性详情
    var theAnswer = attributeAnswerMap.get(selectAttributeNo);
    if (theAnswer == null) {
        theAnswer = "";
    }

    if (theSelectAttribute.ShowType == 0) { // 当需要显示为“输入框”
        html = "<input type='text' class='inputText_min' style='width:" + htmlWidth + "' id='crruentAnswer' onchange='javascript:filterResultData()' value='" + theAnswer + "' />";
    } else if (theSelectAttribute.ShowType == 1) { // 当需要显示为"下拉列表"
        var option = null;
        html = "<select class='select_min' style='width:" + htmlWidth + "' id='crruentAnswer' onchange='javascript:filterResultData()'><option value=''>--所有--</option>";
        for (var i = 0; i < theSelectAttribute.OptionList.length; i++) { // 根据属性详情构建下拉列表option
            option = theSelectAttribute.OptionList[i];
            html += "<option value='" + option.Key + "'";
            if (option.Key == theAnswer) {
                html += " selected ";
            }
            html += ">" + option.Value + "</option>";
        }
        html += "</select>";
    }

    $("#tr_th_result_color").html(html); // 改变表头的显示
}

/**
 * 获取某个属性详情
 *
 * @param attributeNo
 *            属性No
 * @returns
 */
function queryAttribute(attributeNo) {
    if (allAttributeArray != null) {
        for (var i = 0; i < allAttributeArray.length; i++) { // 遍历所有问卷信息,根据No找到其中属性并返回
            if (allAttributeArray[i].No == attributeNo) {
                return allAttributeArray[i];
            }
        }
    }
    return null;
}

/**
 * 根据输入的过滤条件,过滤结果checkbox行
 */
function filterResultData() {
    var crruentAnswer = $("#crruentAnswer").val(); // 获取当前输入的过滤条件
    attributeAnswerMap.put(crruentAttributeNo, crruentAnswer); // 保存到属性Map条件中

    var isFilterFlag = isFilterResultData(); // 先获取是否需要过滤标志

    var boxArray = getAlreadyCheck(true); // 遍历所有的结果checkbox
    ownClear(); // 遍历前先清除当前的图形绘制
    var answers = null;
    var answerValue = null;
    for (var i = 0; i < boxArray.length; i++) {
        $("#result_checkbox_row" + i).show(); // 将checkbox行先显示出来,再根据过滤条件判断是否隐藏
        if (!isFilterFlag) { // 当不需要过滤时,只需要把所有checkbox 显示即可
            continue;
        }

        answers = resultDataList[boxArray.eq(i).val()].answers; // 获取该结果的所有答案进行遍历

        if (answers == null || answers.length <= 0) { //若该结果没有答案,则不显示出来
            $("#result_checkbox_row" + i).hide();
            continue;
        }


        for (var j = 0; j < answers.length; j++) {
            answerValue = attributeAnswerMap.get(answers[j].No); // 从属性Map条件中取到当前的条件值
            // 等于null或者等于空时,默认表示显示全部,不用隐藏
            if (answerValue && answerValue !== answers[j].Value) {
                // 结果答案和过滤条件不一致时则隐藏
                $("#result_checkbox_row" + i).hide();
                break;
            }
        }
    }
}

/**
 * 加载结果行的提示信息
 */
function loadResultCheckboxRowTooltip() {
    if (allAttributeArray == null || allAttributeArray.length <= 0) {
        return;
    }
    var boxArray = getAlreadyCheck(true); // 遍历所有的结果checkbox
    var attribute = null;
    var answers = null;
    var tooltip = null;
    for (var i = 0; i < boxArray.length; i++) {
        tooltip = "";
        answers = resultDataList[boxArray.eq(i).val()].answers; // 获取该结果的所有答案进行遍历
        if (answers == null || answers.length <= 0) {
            continue; // 若没有答案,则进入下一个
        }
        for (var j = 0; j < answers.length; j++) {
            attribute = queryAttribute(answers[j].No);

            if (attribute == null) { // 由于结果中的answer有可能是问卷,因此当未查询到时,直接进行下一个
                continue;
            }

            tooltip += attribute.Name + ":";
            if (attribute.ShowType === 0) { // input类型时直接展示
                tooltip += answers[j].Value;
            } else if (attribute.ShowType === 1) { // List类型时需要翻译具体的Key值
                for (var k = 0; k < attribute.OptionList.length; k++) {
                    if (attribute.OptionList[k].Key === answers[j].Value) {
                        tooltip += attribute.OptionList[k].Value;
                        break;
                    }
                }
            }
            tooltip += " ";
        }
        $("#result_checkbox_row" + i).attr("title", tooltip);
    }
}

/**
 * 是否需要过滤结果
 *
 * @returns {Boolean}
 */
function isFilterResultData() {
    var vaules = attributeAnswerMap.values(); // 从属性Map条件中,取出所有保存的条件
    var isFilter = false;

    if (vaules != null && vaules.length > 0) {
        for (var i = 0; i < vaules.length; i++) { // 遍历判断条件是否为空,只要有一个条件不为空时,则表示需要过滤
            if (vaules[i]) {
                isFilter = true;
                break;
            }
        }
    }

    return isFilter;
}
